/**
 * 教研老师删除自己的科研题目
 * 
 * 如果有确认的同学则不能直接删除，需要撤销报名的同学
 * 
 * 删除后报名的同学的状态变为未报名
 * 
 * /jiaoyan/topic/del
 */



const Topics= require('../../../models/researchTopics')
const Students = require('../../../models/researchTopicStudents')
const utils = require('../../../utils/index')
const $ = require('../../../utils/common')
const MySQLManager = require('../../../utils/MySQLManager');
const sequelize = MySQLManager

const del = async function (req, res) {
    try {
        if (!req.body.id) {
            $.sendMessage(res, 1015, 'id不能缺少')
            return
        }

        // 只能修改自己的科研题目，先判断
        var topic_info = await Topics.findOne({
            where: {
                id: req.body.id,
                teacher_user_name: req.user_name
            }
        })

        // 防止水平越权
        if (topic_info == null) {
            $.sendMessage(res, 1015, '无效id！您只能编辑存在切属于您的课题')
            return
        }

        // 防止有确认的同学的
        if (topic_info.dataValues.confirm_num != '0') {
            $.sendMessage(res, 1015, '此课题有同学已经确认报名，请撤销确认后再进行删除')
            return
        }

        // 如果没人报名则直接删除
        if (topic_info.dataValues.current_student == '0') {
            var result = await Topics.destroy({
                where: {
                    id: req.body.id
                }
            })

            if (result == '1') {
                $.sendMessage(res, 200 , '删除成功')
                return
            }

            $.sendMessage(res, 0000 , '删除失败，请联系管理员')
            return
        }

        // 如果有人报名，则置报名的同学的状态为未报名
        else if (topic_info.dataValues.current_student != '0') {
            // 直接update topic——id 为该id的同学，然后删除
            // 删除事务
            return sequelize.transaction(function (t) {
                return Students.update(
                {student_status: '1' }
                ,
                {
                    where: {
                        topic_id: req.body.id
                    }
                }
                , 
                {transaction: t}).then(function (user) {
                return Topics.destroy(
                    {
                        where: {
                            id: req.body.id
                        }
                    }
                    , {transaction: t});
                })
            
            }).then(function (result) {
                res.json({
                    code: 200,
                    message: '删除成功',
                    result: result
                })
                // 事务已被提交
                // result 是 promise 链返回到事务回调的结果
  
                // // 日志
                utils.create_a_log(req, '课题编辑', '删除')
                return
            }).catch(function (err) {
                res.json({
                    code: 1017,
                    message: '删除失败',
                    err: 'err' + err
                })
                // 事务已被回滚
                // err 是拒绝 promise 链返回到事务回调的错误
            })
        }

        $.sendMessage(res, 0000, '删除失败。请联系管理员')
        return
    }
    catch(error) {
        res.json({
            message: "抓到异常",
            error: 'error' + error
        })
        utils.create_a_log(req, '科研题目管理', '删除', '失败')
        return
    } 
}
    
module.exports = del